home *** CD-ROM | disk | FTP | other *** search
/ Gigarom 4 / Mac Giga-ROM 4.0 - 1993.toast / FILES / DEV / A-B / Acius09:92.cpt / Acius09_92 / CustomOpenDLGƒ / Ext4DIntf.p < prev    next >
Text File  |  1992-10-22  |  17KB  |  488 lines

  1. {=========================================================================================}
  2. {
  3.  
  4.     4th DIMENSION EXTERNAL COMMANDS INTERFACE FILE
  5.  
  6.     Written by ACI and ACIUS Engineering Teams.
  7.     
  8.     © 1987,1991 ACI, ACIUS Inc.
  9.  
  10. }
  11. {=========================================================================================}
  12.  
  13. Unit Ext4DIntf;
  14.  
  15. {$IFC UNDEFINED THINK_PASCAL }
  16.     {$D- }
  17.     {$R- }
  18. {$ENDC }
  19.  
  20. INTERFACE
  21.  
  22. {$IFC UNDEFINED THINK_PASCAL }
  23.     USES    MemTypes,
  24.                 QuickDraw,
  25.                 OSIntf,
  26.                 ToolIntf,
  27.                 PackIntf;
  28. {$ENDC}
  29.  
  30.  
  31. {$IFC UNDEFINED THINK_PASCAL }
  32.     {$SETC DebugOn = TRUE }
  33.     {$IFC DebugOn }
  34.         {$D+ }
  35.         {$R+ }
  36.     {$ELSEC }
  37.         {$D- }
  38.         {$R- }
  39.     {$ENDC }
  40. {$ENDC }
  41.  
  42. CONST
  43.  
  44.     {---------------------------------------------------------------------------------------}
  45.     { Special ProcNums for an External Package }
  46.     {---------------------------------------------------------------------------------------}
  47.     
  48.     Init4DPackage        =    -1;        { Sent once when the database is opened
  49.                                                         and before the execution of the Startup procedure }
  50.     InitPackage            =    -1;        { Same }
  51.     
  52.     DeInit4DPackage    =    -2;        { Sent once when the database is going to be closed }
  53.     DeInitPackage        =    -2;        { Same }
  54.     
  55.     {---------------------------------------------------------------------------------------}
  56.     
  57.     
  58.     {---------------------------------------------------------------------------------------}
  59.     { Types of Fields  }
  60.     {---------------------------------------------------------------------------------------}
  61.  
  62.     AlphaField             = 0;        { Alphanumeric field }
  63.     NumericField         = 1;        { Real field }
  64.     TextField             = 2;        { Text field }
  65.     PictureField         = 3;        { Picture field }
  66.     DateField             = 4;        { Date field }
  67.     BooleanField         = 6;        { Boolean field }
  68.     SubFileField         = 7;        { Subfield field }
  69.     IntegerField         = 8;        { Integer field }
  70.     LongIntField         = 9;        { LongInt field }
  71.     TimeField             = 11;        { Time field }
  72.         
  73.     {---------------------------------------------------------------------------------------}
  74.         
  75.  
  76.     {---------------------------------------------------------------------------------------}
  77.     { Entry points  }
  78.     {---------------------------------------------------------------------------------------}    
  79.         
  80.         EX_CREATE_RECORD                         =  1;        { CREATE RECORD }
  81.         EX_SAVE_RECORD                             =  2;        { SAVE RECORD }
  82.         EX_NEXT_RECORD                             =  3;        { NEXT RECORD }
  83.         EX_PREVIOUS_RECORD                     =  4;        { PREVIOUS RECORD }
  84.         EX_GO_TO_RECORD                         =  5;        { GO TO RECORD }
  85.         EX_Records_in_selection         =  6;        { Records in Selection }
  86.         EX_DELETE_SELECTION                 =  7;        { DELETE SELECTION }
  87.         EX_FIRST_RECORD                         =  8;        { FIRST RECORD }
  88.         EX_Count_files                             =  9;        { Number of files }
  89.         EX_Count_fields                         = 10;        { Number of fields }
  90.         EX_Filename                                 = 11;        { Name of the file }
  91.         EX_FIELD_ATTRIBUTES                 = 12;        { FIELD ATTRIBUTES }
  92.         EX_SORT_SELECTION                     = 13;        { SORT }
  93.         EX_SEARCH                                     = 14;        { SEARCH }
  94.         EX_Before_selection                 = 15;        { Before Selection }
  95.         EX_End_selection                         = 16;        { End of Selection }
  96.         EX_GET_FIELD                                 = 17;        { Read contents of a field }
  97.         EX_PUT_FIELD                                 = 18;        { Write to a field }
  98.         EX_GET_VARIABLE                         = 19;        { Read contents of a variable }
  99.         EX_PUT_VARIABLE                         = 20;        { Write to a variable }
  100.         EX_INSTALL_TASK                         = 21;        { Installing of a 4D task }
  101.         EX_REMOVE_TASK                             = 22;        { Remove a 4D task }
  102.         EX_GetProcResID                         = 23;        { Number of current resource }
  103.         EX_Get_export_filter                 = 24;        { Export ASCII filter (Mac -> Other) }
  104.         EX_Get_import_filter                 = 25;        { Import ASCII filter (Mac <- Other) }
  105.         EX_Get_packed_record                 = 26;        { Reading a packed record }
  106.         EX_PUT_PACKED_RECORD                 = 27;        { Writing a packed record }
  107.         EX_CREATE_SET                             = 28;        { CREATE SET }
  108.         EX_USE_SET                                     = 29;        { USE SET }
  109.         EX_EXECUTE_PROCEDURE                 = 30;        { EXECUTE Procedure}
  110.         EX_Execute_function                 = 31;        { EXECUTE Function }
  111.  
  112.         { The entry points 32 thru 38 are reserved. }
  113.  
  114.         EX_EVENT_IS_TAKEN                     = 39;    { The event is taken by the back-ground task }
  115.         EX_Locked                                     = 40;    { Locked Record }
  116.         EX_READ_WRITE                             = 41;    { READ WRITE/READ ONLY }
  117.         EX_LOAD_RECORD                             = 42;    { LOAD RECORD for multi-user mode }
  118.         EX_RELATE_ONE                             = 43;    { Activate the many to one relations }
  119.         EX_RELATE_MANY                             = 44;    { Activate the one to many relations }
  120.         EX_Is_multiuser                         = 45; { Mode test to access the database }
  121.  
  122.         { The entry point 46 is reserved and not yet implemented. }
  123.  
  124.         EX_String                                     = 47;    { Calls 4th DIMENSION String command }
  125.         EX_POPUP_FIELD_LIST                 = 48;    { Pop Up field list }
  126.         EX_POPUP_FILE_LIST                     = 49;    { Pop up file list }
  127.         EX_GetFileFieldNum                     = 50;    { Returns file and field number of specified string name }
  128.         EX_Selected_record_number     = 51;    { Number of current record in the selection }
  129.  
  130.         { The entry points 52 thru 55 are reserved and not yet implemented. }
  131.  
  132.         EX_Get_infos                                 = 56;
  133.         EX_MESSAGES                                 = 57;
  134.         
  135.     {---------------------------------------------------------------------------------------}
  136.     { External areas  }
  137.     {---------------------------------------------------------------------------------------}    
  138.  
  139.  
  140.     { MouseDown                                    = 1;}
  141.             CallTheScript            = 301;                { Same }
  142.     { KeyDown                                        = 3;}
  143.             GoToNextField            =    110;                { To return in Message }
  144.             GoToPreviousField    =    111;                { Same }
  145.             EventNotTaken            =    112;                { Same }
  146.     { AutoKey                                        = 5;}
  147.     { UpdateEvt                                    = 6;}
  148.             IsNewData                    = 2;                    { in When if the current record has changed }
  149.         InitEvt                                     = 16;
  150.             IsPrinting                    =    -1;                { in Message }
  151.             IsInputLayout                =     1;                { in Modifiers }
  152.             IsOutputLayout            =     0;                { in Modifiers }
  153.             IsExternalWindow        =    -1;             { in When }
  154.         TestEvt                                        = 20;
  155.             AreaCanBeSelected        =    101;            { in Message }
  156.         DeInitEvt                            = 17;
  157.             CannotReject                =    130;            { In Message }
  158.             CanReject                        =    0;                { In Message }
  159.             AreaRejects                    =    122;            { In Message }
  160.         CursorEvt                                    = 18;
  161.         SelectEvt                                 = 21;
  162.         DeSelectEvt                             = 22;
  163.         ScrollEvt                                    =    25;
  164.         StructEvt                                    =    26;
  165.             AreaCustomized            = 102;            { In Message }
  166.         IdleEvt                                            = 0; 
  167.         TestPrintSizeEvt                        = 27;
  168.             AreaVarFrame                =    103;            { In Message }
  169.         PrintSizeEvt                                = 28;
  170.         PrintBandEvt                                = 29;
  171.         UndoEvt                                            = 30;
  172.         CutEvt                                            = 31;
  173.         CopyEvt                                            = 32;
  174.         PasteEvt                                        = 33;
  175.         ClearEvt                                        = 34;
  176.         SelectAllEvt                                = 35;
  177.         InstallMenusEvt                            = 40;
  178.         DeInstallMenusEvt                        = 41;
  179.         MenuSelectedEvt                            = 42;
  180.         ActivateMenusEvt                        = 43;
  181.         GrowBoxEvt                                    =    50;
  182.             AreaMinSize                    =    121;            { In Modifiers - Width,Height in Message }
  183.         
  184. TYPE
  185.  
  186.     {---------------------------------------------------------------------------------------}
  187.     { Bundle '4BND', '4BNX', '4BNR', '4BNH' }
  188.     {---------------------------------------------------------------------------------------}
  189.     
  190.     ResEntry     =    Record
  191.                                 Typ                :    ResType;
  192.                                 LocalNum,
  193.                                 GlobalNum    : Integer;
  194.                             End;
  195.     
  196.     ResTabHandle = ^ResTabPtr;
  197.     ResTabPtr = ^ResTab;
  198.     ResTab         =    Record
  199.                                 NbEntry        : Integer;
  200.                                 Tab                : Array [1..1] Of ResEntry;
  201.                             End;
  202.     
  203.     {---------------------------------------------------------------------------------------}
  204.     
  205.     
  206.     {---------------------------------------------------------------------------------------}
  207.     { 4th DIMENSION Variables and expressions }
  208.     {---------------------------------------------------------------------------------------}
  209.     
  210.     Str40 = string[40];
  211.     Str80 = string[80];
  212.  
  213.     Typkind    = (    Unused1, 
  214.                             Numeric,                                        { Numeric }
  215.                             Alpha,                                            { AlphaNumeric }
  216.                             Unused2, 
  217.                             Date,                                                { Date }
  218.                             Nothing,                                        { Undefined }
  219.                             Bool,                                                { Boolean }
  220.                             Unused3, 
  221.                             Unused4, 
  222.                             Long4D,                                            { LongInt }
  223.                             Pict,                                                { Picture }
  224.                             Time4D,                                            { Time }
  225.                             Unused5, 
  226.                             Table,                                            { 2 Dimensional Array}
  227.                             TabNum,                                            { Array of Reals } 
  228.                             TabInt,                                            { Array of Integers }
  229.                             TabLong,                                        { Array of LongInts }
  230.                             TabDate,                                        { Array of Dates }
  231.                             TabAlpha,                                        { Array of Text }
  232.                             TabPict,                                        { Array of Pictures }
  233.                             Unused6, 
  234.                             TabStrFix,                                    { Array of Fixed Strings }
  235.                             TabBool,                                        { Array of Booleans }
  236.                             Unused7, 
  237.                             StrFix                                            { Fixed String : max. 255 characters }
  238.                         );
  239.     
  240.         Date4D    =    Record                                            {    4th DIMENSION Date expressions }
  241.                                 Day                :    Integer;
  242.                                 Month            : Integer;
  243.                                 Year            : Integer;
  244.                             End;
  245.  
  246.         TE4D        =    Record                                            { 4th DIMENSION Text expressions }
  247.                                 Len                : Integer;            { Length if >=0 }
  248.                                 CC                : CharsHandle;    { Characters, may be equal to Nil }
  249.                             End;
  250.  
  251.         PicEnd    = Record                                            { Added to the end of the Picture definition }
  252.                                 Origin        : Point;        
  253.                                 Transfer    : Integer;
  254.                             End;                                                { Warning : may not be word aligned }
  255.  
  256.  
  257.     TabOfIntHandle         = ^TabOfIntPtr;
  258.     TabOfIntPtr             = ^TabOfInt;
  259.     TabOfLongHandle        = ^TabOfLongPtr;
  260.     TabOfLongPtr            = ^TabOfLong;    
  261.     TabOfNumHandle         = ^TabOfNumPtr;
  262.     TabOfNumPtr             = ^TabOfNum;    
  263.     TabOfAlphaHandle     = ^TabOfAlphaPtr;    
  264.     TabOfAlphaPtr         = ^TabOfAlpha;    
  265.     TabOfPictHandle     = ^TabOfPictPtr;    
  266.     TabOfPictPtr             = ^TabOfPict;    
  267.     TabOfDateHandle     = ^TabOfDatePtr;
  268.     TabOfDatePtr             = ^TabOfDate;
  269.     TabOfBoolHandle     = ^TabOfBoolPtr;
  270.     TabOfBoolPtr             = ^TabOfBool;
  271.     TabOfTabHandle        = ^TabOfTabPtr;
  272.     TabOfTabPtr                = ^TabOfTab;    
  273.     TabStrFixHandle     = ^TabStrFixPtr;
  274.     TabStrFixPtr             = ^TabStrFixRec;
  275.     
  276.     SmallVarRec    = Record
  277.                                     VarKind: Typkind;
  278.                                     Filler1: Boolean;
  279.                                     Case Typkind of
  280.                                         TabInt            : (NbElem: LongInt;TabIntH: TabOfIntHandle;CurSel:Integer);
  281.                                         TabLong            : (NbElem2: LongInt;TabLongH:TabOfLongHandle);
  282.                                         TabNum            : (NbElem3: LongInt;TabNumH:TabOfNumHandle);
  283.                                         TabAlpha        : (NbElem4: LongInt;TabAlphaH:TabOfAlphaHandle);
  284.                                         TabPict            : (NbElem5: LongInt;TabPictH:TabOfPictHandle);
  285.                                         TabDate            : (NbElem6: LongInt;TabDateH:TabOfDateHandle);
  286.                                         TabBool            : (NbElem7: LongInt;TabBoolH:TabOfBoolHandle);
  287.                                         TabStrFix        : (NbElem9: LongInt;TabFixH:TabStrFixHandle);
  288.                                     End;    
  289.     
  290.     
  291.     TabOfInt                     = ARRAY [0..100000] of INTEGER;                   { Array of integers }
  292.     TabOfLong                 = ARRAY [0..100000] of LongInt;                        { Array of LongInts }
  293.     TabOfNum                     = ARRAY [0..100000] of Extended;                    { Array of Reals (extended) }
  294.     TabOfAlpha                 = ARRAY [0..100000] of TE4D;                            { Array of Text's }
  295.     TabOfPict                 = ARRAY [0..100000] of PicHandle;                    { Array of Pictures }
  296.     TabOfDate                 = ARRAY [0..100000] of Date4D;                        { Array of Dates }
  297.     TabOfBool                 = PACKED ARRAY [0..100000] of Boolean;        { Array of Booleans }
  298.     TabOfTab                    = ARRAY [0..100000] of SmallVarRec;                { Array of 2 Dimensions }
  299.     TabStrFixRec             = RECORD
  300.                                                 LenFix: INTEGER;
  301.                                                 { + additionnal data }
  302.                                             END;                                                                        { Array of Fixed length strings }
  303.         
  304.     VarRecPtr    =    ^VarRec;
  305.     VarRec        =    Record
  306.                                 VarKind    : Typkind;
  307.                                 Filler1    : Boolean;
  308.                                 Case Typkind of
  309.                                     Numeric            : (RValue:Extended);
  310.                                     Date                : (DValue:Date4D);
  311.                                     Bool                : (BValue:Boolean);
  312.                                     Alpha                : (Len:Integer;CC:CharsHandle);
  313.                                     Pict                : (PicSize:LongInt;PP:PicHandle);
  314.                                     Long4D,
  315.                                     Time4D            : (LValue:LongInt);
  316.                                     StrFix            : (SLen    : Integer;SValue:Str255);
  317.                                     TabInt            : (NbElem: LongInt;TabIntH: TabOfIntHandle;CurSel:Integer);
  318.                                     TabLong            : (NbElem2: LongInt;TabLongH:TabOfLongHandle);
  319.                                     TabNum            : (NbElem3: LongInt;TabNumH:TabOfNumHandle);
  320.                                     TabAlpha        : (NbElem4: LongInt;TabAlphaH:TabOfAlphaHandle);
  321.                                     TabPict            : (NbElem5: LongInt;TabPictH:TabOfPictHandle);
  322.                                     TabDate            : (NbElem6: LongInt;TabDateH:TabOfDateHandle);
  323.                                     TabBool            : (NbElem7: LongInt;TabBoolH:TabOfBoolHandle);
  324.                                     Table                : (NbElem8: LongInt;TabTabH:TabOfTabHandle);
  325.                                     TabStrFix        : (NbElem9: LongInt;TabFixH:TabStrFixHandle);
  326.                                 End;
  327.     
  328.     {---------------------------------------------------------------------------------------}    
  329.     
  330.     
  331.     {---------------------------------------------------------------------------------------}    
  332.     { Entry Points parameter block }
  333.     {---------------------------------------------------------------------------------------}
  334.     
  335.     LineRec         =    Record
  336.                                     LogicOper    : (NoOper,ANDLogic,ORLogic,Except);
  337.                                     Field            : Integer;
  338.                                     File4D         : Integer;
  339.                                     Operation    : (NoOp,
  340.                                                              IsEqual,
  341.                                                              IsDifferent,
  342.                                                              IsGreater,
  343.                                                              IsGreaterOrEqual,
  344.                                                              IsLess,
  345.                                                              IsLessOrEqual,
  346.                                                              Contains,
  347.                                                              NoContains);
  348.                                     Case Byte of
  349.                                         0: (SRecVal: Str40);
  350.                                         1: (RRecVal: Extended);
  351.                                         2: (DRecVal: Date4D);
  352.                                         3: (LRecVal: LongInt);
  353.                                         4: (IRecVal: INTEGER);
  354.                                         5: (BRecVal: Boolean);
  355.                                     End;
  356.     
  357.     
  358.     ParmBlock        =    Record
  359.                                     FileNumber                : Integer;
  360.                                     FieldNumber                : Integer;
  361.                                     RecordNumber            : LongInt;
  362.                                     ManyToOne, 
  363.                                     OneToMany                    : Boolean;
  364.                                     Name                            : Str255;
  365.                                     HH                                : Handle;
  366.                                     Error                            : Integer;
  367.                                     Result1                        : LongInt;
  368.                                     Result2                        : LongInt;
  369.                                     Result3                        : LongInt;
  370.                                     Result4                        : LongInt;
  371.                                     RR                                : Extended;
  372.                                     DD                                : Date4D;
  373.                                     LL                                : LongInt;
  374.                                     II                                : Integer;
  375.                                     SS                                : Str80;
  376.                                     TT                                : Te4D;
  377.                                     ClearOldVariable    : Boolean;
  378.                                     NumberOfLines            : Integer;
  379.                                     Lines                            : Array [1..20] of LineRec;    { See note below }
  380.                                 End;
  381.                                 
  382.     { Note
  383.         The size of the "Lines" array can be changed.
  384.         If, for example, you call 4th DIMENSION to sort a selection on only 2 levels
  385.         you can declare the variable with only 2 "LineRec".
  386.         Doing this, you economize the amount of memory taken by the record.
  387.         Accordingly, you can declare 30 "LineRec" if you need to sort 
  388.         a selection on 30 levels. }
  389.         
  390.     {---------------------------------------------------------------------------------------}
  391.     
  392.  
  393.     {---------------------------------------------------------------------------------------}
  394.     { Parameters passed to an External Package }
  395.     {---------------------------------------------------------------------------------------}
  396.         
  397.         
  398.         EventRecordPtr     = ^EventRecord;
  399.         ExtendedPtr            =    ^Extended;
  400.         Date4DPtr             = ^Date4D;
  401.         TE4DPtr                 = ^TE4D;
  402.         PicHandPtr             = ^PicHandle;
  403.         HandPtr                 = ^Handle;
  404.  
  405.  
  406.  
  407.         PackParam                = Record
  408.                                                 Case Integer of
  409.                                                     1        :        (I    : LongIntPtr);
  410.                                                     2        :     (L    : LongIntPtr);
  411.                                                     3        :     (R    : ExtendedPtr);
  412.                                                     4        :     (EV    : EventRecordPtr);
  413.                                                     5        :     (RE    : RectPtr);
  414.                                                     6        :     (D    : Date4DPtr);
  415.                                                     7        :     (T    : TE4DPtr);
  416.                                                     8        :     (S    : StringPtr);
  417.                                                     9        :     (P    : PicHandPtr);
  418.                                                     10    :        (HH    : HandPtr);
  419.                                                     11    :        (X    : VarRecPtr);
  420.                                                 End;
  421.         
  422.         PackageVariables             = Array[1..1] Of PackParam;
  423.         PackageVariablesPtr        = ^PackageVariables;
  424.     
  425.             { If you want to coerce the pointers by yourself, use the following types }
  426.             
  427.         ParamsTabPtr    =    ^ParamsTab;
  428.         ParamsTab            = Array [1..1] Of Ptr;
  429.         
  430.     {---------------------------------------------------------------------------------------}
  431.  
  432.  
  433. Procedure    Call4D(Selector:Integer;Var Param:ParmBlock);    Inline $206D,$FFF4,$4E90;
  434. Function    GetProg4DVers:Integer; InLine $3EAD, $FFF8;
  435. Function     IsVersion2:Boolean;
  436. Function    CurProcResID:Integer;
  437. Function    GetResNum(BundleType,ResourceType:ResType;LocalID:Integer):Integer;
  438.  
  439. {-----------------------------------------------------------------------------------------}
  440.     IMPLEMENTATION
  441. {-----------------------------------------------------------------------------------------}
  442.  
  443. Function IsVersion2{:Boolean};
  444. Begin
  445.     IsVersion2:=(GetProg4DVers=$4444);
  446. End; { IsVersion2 }
  447.  
  448. Function CurProcResID{:Integer};
  449. Var    Blk4D: ParmBlock;
  450. Begin
  451.     Call4D(EX_GetProcResID,Blk4D);
  452.     CurProcResID:=Ord(Blk4D.Result1);
  453. End; { CurProcResID }
  454.  
  455. {$IFC UNDEFINED THINK_PASCAL }
  456.     {$R- }
  457. {$ENDC }
  458.  
  459. Function GetResNum{(BundleType,ResourceType:ResType;LocalID:Integer):Integer};
  460. Var    Count:Integer;
  461.         WorkBundle:ResTabHandle;
  462. Begin
  463.     GetResNum:=0;
  464.     WorkBundle:=ResTabHandle(GetResource(BundleType,CurProcResID));
  465.     If WorkBundle<>Nil Then
  466.     Begin
  467.         For Count:=1 To WorkBundle^^.NbEntry Do
  468.         Begin
  469.             With WorkBundle^^.Tab[count] Do
  470.             Begin
  471.                 If (ResourceType=Typ) & (LocalID=LocalNum) Then
  472.                 Begin
  473.                     GetResNum := GlobalNum;
  474.                     Count:=32001;
  475.                 End;
  476.             End;
  477.         End;
  478.     End;
  479. End; { GetResNum }
  480.  
  481. {$IFC UNDEFINED THINK_PASCAL }
  482.     {$IFC DebugOn }
  483.         {$R+ }
  484.     {$ENDC }
  485. {$ENDC }
  486.  
  487. End. { End of Unit Ext4DIntf }
  488.